2021年7月28日星期三

抽象工厂模式(学习笔记)

  1. 意图

  提供一个接口以提供一系列相关或相互依赖的对象,而无须知道指定它们的具体的类

  2. 别名

  Kit

  3. 动机

  • 在软件系统中经常面临着一系列相互依赖的对象的创建工作;同时,由于需求变化,往往存在更多系列对象的创建工作
  • 如何绕过常规的对象创建方法(new),提供一种封装机制来避免客户程序和这种多系列具体对象创建工作的紧耦合

  4. 适用性

  • 一个系统独立于它的产品的创建、组合和表示
  • 一个系统要由多个产品系列中的一个配置
  • 要强调一系列相关产品对象的设计以便进行联合使用
  • 提供一个产品类库,但是只想显示接口而不是实现

  5. 结构

  

  6. 效果

  抽象工厂具有以下优点和缺点:

  1) 分离了具体的类  客户通过它们的抽象对象接口操纵实例。产品的类名也在具体工厂的实现中被隔离,即它们不出现在客户代码中

  2) 易于交换产品系列  抽象工厂创建了完整的产品系列,只需要改变具体工厂即可使用不同产品的配置

  3) 利于产品的统一性  当一个系列中的产品对象被设计成一起工作时,一个应用一次只能使用同一系列中的对象

  4) 难以支持新种类的产品  抽象工厂接口确定了可以被创建的产品集合。支持新种类的产品就需要扩展该工厂接口,这将设计抽象工厂类及其子类的改变

  7. 代码实现

   buttons: 第一个产品层次结构 

Button.java

package abstract_factory;/** * @author GaoMing * @date 2021/7/17 - 15:37 * */public interface Button { void paint();}

 MacOSButton.java

package abstract_factory;

/**
* @author GaoMing
* @date 2021/7/17 - 15:38
*/
public class MacOSButton implements Button{
@Override
public void paint(){
System.out.println("You have created MacOSButton.");
}
}

 WindowsButton.java

package abstract_factory;/** * @author GaoMing * @date 2021/7/17 - 15:39 */public class WindowsButton implements Button{ @Override public void paint(){  System.out.println("You have created WindowButton."); }}

Checkbox: 第二个产品结构

Checkbox.java

package abstract_factory;/** * @author GaoMing * @date 2021/7/17 - 15:40 */public interface Checkbox { void paint();}

 MacOSCheckbox.java

package abstract_factory;/** * @author GaoMing * @date 2021/7/17 - 15:41 */public class MacOSCheckbox implements Checkbox{ @Override public void paint(){  System.out.println("You have created MacOSCheckbox."); }}

 WindowsCheckbox.java

 
package abstract_factory;

/**
* @author GaoMing
* @date 2021/7/17 - 15:42
*/
public class WindowsCheckbox implements Checkbox{
@Override
public void paint(){
System.out.println("You have created WindowCheckbox.");
}
}

 Factories

GUIFactories.java: 抽象工厂

package abstract_factory.factories;import abstract_factory.Button;import abstract_factory.Checkbox;/** * @author GaoMing * @date 2021/7/17 - 15:43 */public interface GUIFactory { Button createButton(); Checkbox createCheckbox();}

MacOSFactory.java: 具体工厂 ( mac­OS)

package abstract_factory.factories;import abstract_factory.Button;import abstract_factory.Checkbox;import abstract_factory.MacOSButton;import abstract_factory.MacOSCheckbox;/** * @author GaoMing * @date 2021/7/17 - 15:46 */public class MacOSFactory implements GUIFactory{ @Override public Button createButton(){  return new MacOSButton(); } @Override public Checkbox createCheckbox(){  return new MacOSCheckbox(); }}

WindowsFactory.java: 具体工厂 (Windows)

package abstract_factory.factories;import abstract_factory.Button;import abstract_factory.Checkbox;import abstract_factory.WindowsButton;import abstract_factory.WindowsCheckbox;/** * @author GaoMing * @date 2021/7/17 - 15:49 */public class WindowsFactory implements GUIFactory{ @Override public Button createButton(){  return new WindowsButton(); } @Override public Checkbox createCheckbox(){  return new WindowsCheckbox(); }}

Application.java: 客户端代码

package abstract_factory;import abstract_factory.Button;import abstract_factory.Checkbox;import abstract_factory.factories.GUIFactory;/** * @author GaoMing * @date 2021/7/17 - 15:52 */public class Application { private Button button; private Checkbox checkbox; public Application(GUIFactory factory){  button = factory.createButton();  checkbox = factory.createCheckbox(); } public void paint(){  button.paint();  checkbox......

原文转载:http://www.shaoqun.com/a/902628.html

跨境电商:https://www.ikjzd.com/

拍拍购物:https://www.ikjzd.com/w/2205

auction:https://www.ikjzd.com/w/2311

转运中国:https://www.ikjzd.com/w/1549


1.意图  提供一个接口以提供一系列相关或相互依赖的对象,而无须知道指定它们的具体的类  2.别名  Kit  3.动机在软件系统中经常面临着一系列相互依赖的对象的创建工作;同时,由于需求变化,往往存在更多系列对象的创建工作如何绕过常规的对象创建方法(new),提供一种封装机制来避免客户程序和这种多系列具体对象创建工作的紧耦合  4.适用性一个系统独立于它的产品的创建、组合和表示一个系统要由多个产
这里是楚文化的故乡,众多纪录片讲述这里,外地人却还分不清它在哪:http://www.30bags.com/a/222292.html
这里是丹顶鹤的家园,也是麋鹿的故乡,秋日盐城,风景中收获童话_景区:http://www.30bags.com/a/220324.html
这里是福建的避暑胜地,更被誉为福州的空中花园,一年四季都很美:http://www.30bags.com/a/224284.html
这里是福州最古老的遗址,庭院风景可媲美江南,至今不收门票!:http://www.30bags.com/a/224227.html
装睡屁股转过去让滑进去 挺进白嫩老师下面:http://lady.shaoqun.com/a/247311.html
随着车子不断晃动一进一出 男朋友在车里㖭刺激:http://lady.shaoqun.com/a/247999.html
口述办公室添的我好爽 小宝贝你下面都湿透了:http://lady.shaoqun.com/a/247976.html
强行扒开女班长大腿 班长让我脱了她的内衣:http://lady.shaoqun.com/m/a/247580.html
和谐房事有什么好处 夫妻性爱美满的4个益处 :http://lady.shaoqun.com/a/439517.html
如何找到一个有钱的女孩,让她对自己感兴趣:http://lady.shaoqun.com/a/439518.html
性生活中的三种行为伤害了前列腺和子宫!但你错误地认为自己很强:http://lady.shaoqun.com/a/439519.html
如梦之梦深圳购票时间:http://www.30bags.com/a/530770.html

没有评论:

发表评论