zoukankan      html  css  js  c++  java
  • java抽象工厂模式

    意图:抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类
    适用性:
    1、一个系统要独立于它的产品的创建、组合和表示时。
    2、一个系统要由多个产品系列中的一个来配置时。
    3、当你要强调一系列相关的产品对象的设计以便进行联合使用时。
    4、当你提供一个产品类库,而只想显示它们的接口而不是实现时。
    结构图:

     

    实例:

    1 package com.test.patten.adstractfactory;
    2 
    3 public interface AbstractFactory {
    4     AbstractProductA createProductA();
    5     AbstractProductB createProductB();
    6 }
     1 package com.test.patten.adstractfactory;
     2 
     3 public class ConcreteFactory1 implements AbstractFactory {
     4 
     5     @Override
     6     public AbstractProductA createProductA() {
     7         return new ProductA1();
     8     }
     9 
    10     @Override
    11     public AbstractProductB createProductB() {
    12         return new ProductB1();
    13     }
    14 }
     1 package com.test.patten.adstractfactory;
     2 
     3 public class ConcreteFactory2 implements AbstractFactory {
     4 
     5     @Override
     6     public AbstractProductA createProductA() {
     7         return new ProductA2();
     8     }
     9 
    10     @Override
    11     public AbstractProductB createProductB() {
    12         return new ProductB2();
    13     }
    14 }
    1 package com.test.patten.adstractfactory;
    2 
    3 public interface AbstractProductA {
    4 
    5 }
    1 package com.test.patten.adstractfactory;
    2 
    3 public interface AbstractProductB {
    4 
    5 }
    1 package com.test.patten.adstractfactory;
    2 
    3 public class ProductA1 implements AbstractProductA {
    4     
    5     public ProductA1() {
    6         System.out.println("我是产品A1");
    7     }
    8     
    9 }
    1 package com.test.patten.adstractfactory;
    2 
    3 public class ProductA2 implements AbstractProductA {
    4 
    5     public ProductA2() {
    6         System.out.println("我是产品A2");
    7     }
    8     
    9 }
    1 package com.test.patten.adstractfactory;
    2 
    3 public class ProductB1 implements AbstractProductB {
    4     
    5     public ProductB1() {
    6         System.out.println("我是产品B1");
    7     }
    8     
    9 }
    1 package com.test.patten.adstractfactory;
    2 
    3 public class ProductB2 implements AbstractProductB {
    4     
    5     public ProductB2(){
    6         System.out.println("我是产品B2");
    7     }
    8     
    9 }
     1 package com.test.patten.adstractfactory;
     2 
     3 public class Client {
     4     public static void main(String args[]){
     5         //我需要ProductA1,ProductB1来完成我的项目
     6         AbstractFactory f1 = new ConcreteFactory1();
     7         AbstractProductA a1 = f1.createProductA();
     8         AbstractProductB b1 = f1.createProductB();
     9         
    10         //我需要ProductA2,ProductB2来完成我的项目
    11         AbstractFactory f2 = new ConcreteFactory2();
    12         AbstractProductA a2 = f2.createProductA();
    13         AbstractProductB b2 = f2.createProductB();
    14     }
    15 }

    输出:

    我是产品A1
    我是产品B1
    我是产品A2
    我是产品B2

    抽象工厂与工厂方法的异同:
    1、抽象工厂和工厂方法都用来创建对象,抽象工厂使用对象组合,对象的创建被实现在工厂接口所暴露出来的的方法中;工厂方法使用继承,把对象的创建委托给子类,子类实现工厂方法来创建对象
    2、抽象工厂用来创建整个产品家族和将制造的相关产品集合起来,故当要改变产品时(新增,修改)就必须改变接口,抽象工厂中的产品经常会用工厂方法实现;工厂方法将客户代码从需要实例化的具体子类中解耦,或者目前还不知道将来需要实例化那些具体类时使用

  • 相关阅读:
    python K-means工具包初解
    Struts2学习笔记1
    北邮iptv用WindowsMediaplayer打不开的解决的方法
    数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
    Java中Queue类实现
    LinkedList
    android 自定义 radiobutton 文字颜色随选中状态而改变
    Android自定义radiobutton(文字靠左,选框靠右)
    Android进阶2之APK方式换肤
    Android APK方式换肤实现原理
  • 原文地址:https://www.cnblogs.com/ikuman/p/2922622.html
Copyright © 2011-2022 走看看