简单工厂模式、工厂方法模式、抽象工厂模式
简单工厂模式、工厂方法模式、抽象工厂模式
一、简单工厂模式常规设计:多个客户端对应一个创建产品类。一旦新增产品,每个客户端都需要修改,耦合性太高。 简单工厂模式:客户与创建产品中添加一个工厂,创建对象都在工厂中,一旦新增产品,只需要修改工厂二、工厂方法模式抽象产品接口具体产品类(实现抽象产品接口方法)抽象工厂接口具体工厂类(实现抽象产品接口及创建具体产品类)中间件:聚合抽象工厂接口,接口调用具体工
简单工厂模式、工厂方法模式、抽象工厂模式
一、简单工厂模式
- 常规设计:多个客户端对应一个创建产品类。一旦新增产品,每个客户端都需要修改,耦合性太高。 简
- 单工厂模式:客户与创建产品中添加一个工厂,创建对象都在工厂中,一旦新增产品,只需要修改工厂
二、工厂方法模式
- 抽象产品接口
- 具体产品类(实现抽象产品接口方法)
- 抽象工厂接口
- 具体工厂类(实现抽象产品接口及创建具体产品类)
- 中间件:聚合抽象工厂接口,接口调用具体工厂类方法创建具体产品
//抽象产品类
public interface IAbstractProduct {
void typeProduct();
}
//具体产品1
public class SpecificProductOne implements IAbstractProduct{
@Override
public void typeProduct() {
println("I am SpecificProductOne");
}
}
//具体产品2
public class SpecificProductTwo implements IAbstractProduct{
@Override
public void typeProduct() {
println("I am SpecificProductTwo");
}
}
//抽象工厂类
public interface IAbstractFactory {
IAbstractProduct createSpecificProduct();
}
//具体产品1的具体工厂
public class SpecificProductOneFactory implements IAbstractFactory{
@Override
public IAbstractProduct createSpecificProduct() {
return new SpecificProductOne();
}
}
//具体产品2的具体工厂
public class SpecificProductTwoFactory implements IAbstractFactory{
@Override
public IAbstractProduct createSpecificProduct() {
return new SpecificProductTwo();
}
}
//中间件
public class ProductFactory {
private IAbstractProduct product;
//聚合抽象产品类
public ProductFactory(IAbstractProduct product) {
this.product = product;
}
public void getTypeProduct(){
();
}
}
//客户端
public class Client {
public static void main(String[] args) {
//抽象工厂
IAbstractFactory iAbstractFactory = new SpecificProductOneFactory();
//抽象工厂调用创建具体产品
IAbstractProduct specificProductOne = ();
//中间件聚合具体产品(抽象产品类)
ProductFactory productFactory = new ProductFactory(specificProductOne);
//抽象产品类调用方法
productFactory.getTypeProduct();
}
}
若添加新产品,则新增具体产品类和具体工厂类就可以,将客户端new 产品1工厂替换成产品工厂就可以,符合开闭原则。
三、抽象工厂模式
代码语言:javascript代码运行次数:0运行复制//手机产品接口
interface IPhoneProduct{
//开机
void start();
//关机
void shutdown();
}
//路由器产品接口
interface IRouterProduct{
//开机
void start();
//关机
void shutdown();
}
//华为手机实现类
class HuaweiPhone implements IPhoneProduct{
@Override
public void start() {
println("开启华为手机");
}
@Override
public void shutdown() {
println("关闭华为手机");
}
}
//华为路由器实现类
class HuaweiRouter implements IRouterProduct{
@Override
public void start() {
println("开启华为路由器");
}
@Override
public void shutdown() {
println("关闭华为路由器");
}
}
//小米手机实现类
class XiaomiPhone implements IPhoneProduct{
@Override
public void start() {
println("开启小米手机");
}
@Override
public void shutdown() {
println("关闭小米手机");
}
}
//小米路由器实现类
class XiaomiRouter implements IRouterProduct{
@Override
public void start() {
println("开启小米路由器");
}
@Override
public void shutdown() {
println("关闭小米路由器");
}
}
//工厂接口类
interface IProductFactory{
//生产手机
IPhoneProduct phoneProduct();
//生产路由器
IRouterProduct routerProduct();
}
//华为工厂实现类
class HuaweiFactory implements IProductFactory{
@Override
public IPhoneProduct phoneProduct() {
return new HuaweiPhone();
}
@Override
public IRouterProduct routerProduct() {
return new HuaweiRouter();
}
}
//小米工厂实现类
class XiaomiFactory implements IProductFactory{
@Override
public IPhoneProduct phoneProduct() {
return new XiaomiPhone();
}
@Override
public IRouterProduct routerProduct() {
return new XiaomiRouter();
}
}
public class ClientAbstractFactory {
public static void main(String[] args) {
//华为工厂
IProductFactory factory = new HuaweiFactory();
IPhoneProduct product = factory.phoneProduct();
IRouterProduct router = factory.routerProduct();
product.start();
product.shutdown();
router.start();
router.shutdown();
}
}
1、抽象工厂适合套装类型场景,比如各种家电一套下来都是华为的,或者一身衣服下来都是耐克的。 新增品牌则只需要实现工厂接口类即可,然后IProductFactory factory = new newFactory();下面的代码都不用动。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2021-07-19,如有侵权请联系 cloudcommunity@tencent 删除接口路由器手机产品华为#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-20 21:09:41
下一篇:IOC和AOP理解
推荐阅读
留言与评论(共有 8 条评论) |
本站网友 石烤屋 | 27分钟前 发表 |
分享自作者个人站点/博客 | |
本站网友 补钙食谱 | 28分钟前 发表 |
分享自作者个人站点/博客 | |
本站网友 山东企业 | 19分钟前 发表 |
简单工厂模式 | |
本站网友 常建 | 24分钟前 发表 |
简单工厂模式:客户与创建产品中添加一个工厂 | |
本站网友 管家婆单机破解版 | 23分钟前 发表 |
简单工厂模式:客户与创建产品中添加一个工厂 | |
本站网友 网联清算有限公司 | 7分钟前 发表 |
简单工厂模式:客户与创建产品中添加一个工厂 | |
本站网友 顾比倒数线 | 16分钟前 发表 |
本文参与 腾讯云自媒体同步曝光计划 |