zoukankan      html  css  js  c++  java
  • 应用最广泛的模式-工厂方法模式

    1、工厂方法模式的定义:

    定义一个用于创建对象的接口,让子类决定实例化哪个类。

     1 /**抽象产品类**/
     2 
     3 public  abstract class Product{
     4 
     5 //产品类的抽象方法
     6 
     7 //由具体的产品类去实现
     8 
     9 public abstract void method();
    10 
    11 }
     1 /**具体产品类A**/
     2 
     3 public class ConcreteProductA extends Product{
     4 
     5 @Override
     6 
     7 public void method(){
     8 
     9 System.out.println(“我是具体的产品A”);
    10 
    11 }
    12 
    13 }
     1 /**具体产品类B**/
     2 
     3 public class ConcreteProductB extends Product{
     4 
     5 @Override
     6 
     7 public void method(){
     8 
     9 System.out.println(“我是具体的产品B”);
    10 
    11 }
    12 
    13 }
     1 /**抽象工厂类**/
     2 
     3 public abstract class Factory{
     4 
     5 //抽象工厂方法
     6 
     7 //具体生产什么由子类去实现
     8 
     9 //@return 具体的产品对象
    10 
    11 public abstract Product createProduct();
    12 
    13 }
     1 /**具体工厂类**/
     2 
     3 public class ConcreteFactory extends Factory{
     4 
     5 @Override
     6 
     7 public Product createProduct(){
     8 
     9 return new ConcreteProductA();
    10 
    11 }
    12 
    13 }
     1 /**客户类**/
     2 
     3 public class Client{
     4 
     5 public static void main(String[] args){
     6 
     7 Factory factory = new ConcreteFactory();
     8 
     9 Product p = factory.createProduct();
    10 
    11 p.method();
    12 
    13 }
    14 
    15 }

    2、通过反射的方式更简洁地来生产具体产品对象:

     1 /**抽象工厂类**/
     2 
     3 public abstract class Factory{
     4 
     5 //抽象工厂方法
     6 
     7 //具体生产什么由子类去实现
     8 
     9 //@param clz 产品对象类类型
    10 
    11 //@return 具体的产品对象
    12 
    13 public abstract <T extends Product> T createProduct(Class<T> clz);
    14 
    15 }
     1 /**具体工厂类**/
     2 
     3 public class ConcreteFactory extends Factory{
     4 
     5 @Override
     6 
     7 public <T extends Product> T createProduct(Class<T> clz){
     8 
     9 Product p = null;
    10 
    11 try{
    12 
    13 p = (Product) Class.forName(clz.getName()).newInstance();
    14 
    15 }catch(Exception e){
    16 
    17 e.printStackTrace();
    18 
    19 }
    20 
    21 return (T) p;
    22 
    23 }
    24 
    25 }
     1 /**客户类**/
     2 
     3 public class Client{
     4 
     5 public static void main(String[] args){
     6 
     7 Factory factory = new ConcreteFactory();
     8 
     9 Product p = factory.createProduct(ConcreteProductB.class);
    10 
    11 p.method();
    12 
    13 }
    14 
    15 }
  • 相关阅读:
    iOS遍历程序内某个文件夹下所有文件的属性
    CATransition 转场动画
    Xcode安装的推送证书所在目录
    UIMenuController 实现长按显示自定义菜单功能
    ios调用第三方程序打开文件,以及第三方调用自己的APP打开文件
    购物车界面,不同section,点击增减物品,确定取消选中的逻辑判断
    iOS UINavigationController
    iOS9 URL Schme 白名单
    iOS9 HTTPS
    iOS9 后台定位
  • 原文地址:https://www.cnblogs.com/vijozsoft/p/5575875.html
Copyright © 2011-2022 走看看