2021年6月30日星期三

23天设计模式之抽象工厂模式

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

没有评论:

发表评论