zoukankan      html  css  js  c++  java
  • java工厂方法模式

    意图:定义一个用于创建对象的接口,让子类决定创建那个类。Factory Method使一个类的实例化延迟到其子类中
    动机:框架使用抽象类定义和维护对象之间的关系。这些对象的创建通常也由框架负责
    适用性:
    1.当一个类不知道它所必须创建的对象的类的时候
    2.当一个类希望由它的子类来指定它所创建的对象的时候
    3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将那一个帮助子类是代理者这一信息局部化的时候
    结构:

    工厂方法的实现主要有两种情况:

    1.Creator类是一个抽象类并且不提供它所声明的工厂方法的实现

    2.Creator是一个具体的类而且为工厂方法提供一个缺省的实现

    实例:

     1 package com.test.patten.factory;
     2 
     3 public abstract class Creator {
     4     public abstract Product productFactory(String type);
     5     
     6     public void doSomething(String type) {
     7         Product product = productFactory(type);
     8         product.getPrice();
     9     }
    10 }
    1 package com.test.patten.factory;
    2 
    3 public abstract class Product {
    4     double price = 0;
    5     public void getPrice() {
    6         System.out.println("我的价格是:"+price);
    7     }
    8 }
    1 package com.test.patten.factory;
    2 
    3 public class GoodProduct extends Product {
    4 
    5     public GoodProduct() {
    6         super();
    7         this.price = 100.0;
    8     }
    9 }
    1 package com.test.patten.factory;
    2 
    3 public class BadProduct extends Product {
    4 
    5     public BadProduct() {
    6         super();
    7         this.price = 0.01;
    8     }
    9 }
     1 package com.test.patten.factory;
     2 
     3 public class ConcreteCreator extends Creator {
     4 
     5     @Override
     6     public Product productFactory(String type) {
     7         Product product = null;
     8         if(type.equals("good")){
     9             product = new GoodProduct();
    10         }else if (type.equals("bad")) {
    11             product = new BadProduct();
    12         }
    13         return product;
    14     }
    15 
    16 }

    测试一下:

    1 package com.test.patten.factory;
    2 
    3 public class Client {
    4     public static void main(String args[]){
    5         Creator creator = new ConcreteCreator();
    6         creator.doSomething("good");//生产一个好的产品
    7         creator.doSomething("bad");//生产一个次品
    8     }
    9 }
    我的价格是:100.0
    我的价格是:0.01

    应用:工厂方法主要应用于工具包和框架中
    设计原则:要依赖抽象,不要依赖具体类-依赖倒置原则

  • 相关阅读:
    数据结构与算法之PHP排序算法(快速排序)
    ThinkPHP5.0源码学习之注册错误和异常处理机制
    ThinkPHP5.0源码学习之注册自动加载
    C高级 跨平台协程库
    C中级 MariaDB Connector/C API 编程教程
    C高级 框架开发中红黑树结构
    c json实战引擎四 , 最后❤跳跃
    C基础 万能动态数组
    C基础 内存统一入口
    C基础 一个可以改变linux的函数getch
  • 原文地址:https://www.cnblogs.com/ikuman/p/2881126.html
Copyright © 2011-2022 走看看