23天设计模式之抽象工厂模式
文章简介
《23天设计模式之抽象工厂模式》这是跟工厂模式相关的一篇文章,但是抽象工厂又是不同于工厂模式的,抽象工厂是围绕一个超级工厂去创建其它工厂,下面就一起来看看吧!
抽象工厂模式
定义
属于创建型模式,用于产品族的构建。产品族指的是某个品牌下的不同系类产品,如华为下的手机、电视、电脑等系列合起来就是华为的产品族。
抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。
区别:工厂方法模式是一个产品系列一个工厂类,而抽象工厂模式是多个产品系列一个工厂类。
通俗理解就是:
工厂方法模式中,有一个华为手机工厂类,这个工厂只能提供华为手机这一种产品,也就是只能提供华为手机,不能提供华为TV。
而抽象工厂中,有一个华为工厂类,这个工厂既能提供华为手机,也能提供华为TV,也就是华为系列的所有产品都能提供。
上文所指的产品系列指的是,华为手机是一个产品系列,华为TV是另一个产品系列。
增加新产品必须修改原有代码,不符合开闭原则,增加新产品族不用修改原有代码。
角色
- 抽象产品角色:描述产品有什么功能,一般用接口或抽象类表示。如 手机接口
- 具体产品角色:实现抽象产品角色的类,是真实的产品。如 华为手机
- 抽象工厂角色:描述产品族,表示具体工厂可以生产的所有产品。
- 具体工厂角色:实现抽象工厂角色的类,用于客户端调用创建产品实例。
代码实现
- 抽象产品角色
public interface Phone { void call(); void send(String msg);}public interface TV { // 播放 void play(); // 选择频道 void choose(int channel);}
- 具体产品角色
public class HuaweiPhone implements Phone{ @Override public void call() { System.out.println("HuaweiPhone call..."); } @Override public void send(String msg) { System.out.println("HuaweiPhone send... " + msg); }}public class HuaweiTV implements TV{ @Override public void play() { System.out.println("HuaweiTV play..."); } @Override public void choose(int channel) { System.out.println("HuaweiTV choose... " + channel); }}public class XiaomiPhone implements Phone{ @Override public void call() { System.out.println("XiaomiPhone call..."); } @Override public void send(String msg) { System.out.println("XiaomiPhone send... " + msg); }}public class XiaomiTV implements TV{ @Override public void play() { System.out.println("XiaomiTV play..."); } @Override public void choose(int channel) { System.out.println("XiaomiTV choose... " + channel); }}
- 抽象工厂角色
public interface AbstractFactory { Phone getPhone(); TV getTV();}
- 具体工厂角色
public class HuaweiFactory implements AbstractFactory{ @Override public Phone getPhone() { return new HuaweiPhone(); } @Override public TV getTV() { return new HuaweiTV(); }}public class XiaomiFactory implements AbstractFactory{ @Override public Phone getPhone() { return new XiaomiPhone(); } @Override public TV getTV() { return new XiaomiTV(); }}
- 客户端测试
public class Client { public static void main(String[] args) { // 获得每个品牌的工厂 HuaweiFactory huaweiFactory = new HuaweiFactory(); XiaomiFactory xiaomiFactory = new XiaomiFactory(); // 获取不同品牌的产品,可以发现,这里获取到的产品都使用了向上转型,客户可以通过抽象接口操纵实例 Phone huaweiPhone = huaweiFactory.getPhone(); Phone xiaomiPhone = xiaomiFactory.getPhone(); TV huaweiTV = huaweiFactory.getTV(); TV xiaomiTV = xiaomiFactory.getTV(); huawe......原文转载:http://www.shaoqun.com/a/836183.html
跨境电商:https://www.ikjzd.com/
csa认证:https://www.ikjzd.com/w/904
环球市场:https://www.ikjzd.com/w/1762
acedota:https://www.ikjzd.com/w/2070
23天设计模式之抽象工厂模式文章简介《23天设计模式之抽象工厂模式》这是跟工厂模式相关的一篇文章,但是抽象工厂又是不同于工厂模式的,抽象工厂是围绕一个超级工厂去创建其它工厂,下面就一起来看看吧!抽象工厂模式定义属于创建型模式,用于产品族的构建。产品族指的是某个品牌下的不同系类产品,如华为下的手机、电视、电脑等系列合起来就是华为的产品族。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的
转运四方:https://www.ikjzd.com/w/1342
汇通达:https://www.ikjzd.com/w/1758
账号刚解封,Listing竟回到解放前?:https://www.ikjzd.com/articles/96744
亚马逊用这种手法优化Listing增加产品竞争力:https://www.ikjzd.com/articles/96745
亚马逊撰写产品listing必经的三大阶段,你还在哪一段停留?:https://www.ikjzd.com/articles/96746
5.25封号后续:已有卖家救回账号!:https://www.ikjzd.com/articles/96748
一女多男两根同时进去小说 娇嫩的被三根粗大的:http://lady.shaoqun.com/m/a/248205.html
口述:老婆的男秘问我每周和老婆几次:http://www.30bags.com/m/a/249651.html
2021深圳国际酒展延期举办(最新时间):http://www.30bags.com/a/462643.html
2021深圳春季茶博会延期举办(最新时间):http://www.30bags.com/a/462644.html
在四川乐山女子公园被抢劫杀害的凶手被一审判处死刑:http://lady.shaoqun.com/a/391625.html
女方晚上走了,失去联系6天。还是没有消息。强奸和谋杀被拘留了5天:http://lady.shaoqun.com/a/391626.html
没有评论:
发表评论