教程集 www.jiaochengji.com
教程集 >  脚本编程  >  java  >  正文 java工厂模式的学习笔记

java工厂模式的学习笔记

发布时间:2016-10-19   编辑:jiaochengji.com
教程集为您提供java工厂模式的学习笔记等资源,欢迎您收藏本站,我们将为您提供最新的java工厂模式的学习笔记资源
工厂模式在java中用到的非常的多了并且用处也不小,相比起php工厂模式我觉得java做得更好,下面来看一些小编整理的java工厂模式的学习笔记

简单工厂模式(实例)

专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类,简单工厂(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,但其不属于23种GOF设计模式之一,通常它根据自变量的不同返回不同的类的实例。

UML

简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建出哪一个产品类的实例。由上图可以看出,简单工厂模式有工厂、抽象产品、具体产品三个角色。

工厂角色(Factory)
是简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。可被外界直接调用来创建产品对象
抽象产品角色(Product)
是简单工厂模式所创建的所有产品对象的父类,它负责描述所有实例所共有的公共接口
具体产品角色(ConcreteProductA及ConcreteProductB)
是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例
 

现实生活中大家都习惯刷卡买单,卡的种类很多,VISA、MASTERCARD等等…下面我们写代码模拟刷卡处理


package com.yq1012.创建型模式.工厂方法.简单工厂;
 
import java.io.Console;
 abstract class BankCardHandle
    {
        public abstract void HandleProcess();
    }
 
 
 
package com.yq1012.创建型模式.工厂方法.简单工厂;
 
import java.io.Console;
 abstract class BankCardHandle
    {
        public abstract void HandleProcess();
    }
 
 
 
 
package com.yq1012.创建型模式.工厂方法.简单工厂;
 class MasterCardHandle extends BankCardHandle
 {
 
 @Override
 public void HandleProcess() {
  System.out.println("MASTERCARD卡处理中"); 
 }
 
 }
 
 
package com.yq1012.创建型模式.工厂方法.简单工厂;
 class VisaHandle extends BankCardHandle
 {
 
 
 @Override
 public void HandleProcess() {
 
      System.out.println("VISA卡处理中");
  
 }
 
 }
 
 
 
package com.yq1012.创建型模式.工厂方法.简单工厂;
 
public class Test {
 
 public static void main(String[] args) {
  
  HandleFactory factory= new HandleFactory();
  BankCardHandle bankCardHandle= factory.CreateBankCardHandle("VISA");
  bankCardHandle.HandleProcess();
 }
//静态工厂模式:顾名思义就知道他是用静态方法实现的,其创建的对象具有一定的特性,譬如说是某类的派生或者某接口的实现。其比较简单。
// 专门定义一个类来负责创建其他类的实例
// ,被创建的实例通常都具有共同的父类
// ,简单工厂(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,
// 属于类的创建型模式,但其不属于23种GOF设计模式之一,通常它根据自变量的不同返回不同的类的实例。
// 优势劣势:
//   在简单工厂模式中,工厂类是整个模式的关键,其包含必要的判断逻辑,能够根据外界给定的信息,决定究竟创建哪个类的实例,
// 外界可以不用去关注对象的创建,仅需要负责“消费”对象就可以了,明确区分了责任,有利于结构的优化。
//
// 不过,简单工厂模式的缺点也提现在其工厂类上,该类集中了所有实例的创建逻辑,违反了高内聚的责任分配原则,
// 当系统的具体产品类不断增多时,工厂类中条件判断过多,不利于扩展及维护,简单工厂模式的这些缺点,利用工厂方法模式可以得到一定的克服。
}


工厂模式(实例)

package com.yq1012.创建型模式.工厂方法.工厂模式;
/**
 * 动物类
 * @author Lyon Yao
 *
 */ 
public abstract class Animal { 
     
    private String name; 
     
    public Animal() { 
        super(); 
        // TODO Auto-generated constructor stub 
    } 
    public Animal(String name) { 
        super(); 
        this.name = name; 
    } 
    public abstract void eat(); 
    public String getName() { 
        return name; 
    } 
    public void setName(String name) { 
        this.name = name; 
    } 
     

 

package com.yq1012.创建型模式.工厂方法.工厂模式;
/**
 * 母亲接口
 * @author Lyon
 *
 */ 
public interface AnimalMother { 
    /**
     * 生育动物
     * @return
     */ 
    public  Animal giveBirth(); 

 

package com.yq1012.创建型模式.工厂方法.工厂模式;
/**
 * 猫类
 * @author Lyon Yao
 *
 */ 
public class Cat extends Animal { 
 
    public Cat() { 
        // TODO Auto-generated constructor stub 
    } 
 
    public Cat(String name) { 
        super(name); 
        // TODO Auto-generated constructor stub 
    } 
 
    @Override 
    public void eat() { 
        // TODO Auto-generated method stub 
        System.out.println("I like to eat fish!"); 
    } 
 

 

package com.yq1012.创建型模式.工厂方法.工厂模式;
/**
 * 猫母亲 生猫咪
 * @author Lyon Yao
 *
 */ 
public class CatMother implements AnimalMother { 
 
    @Override 
    public Animal giveBirth() { 
        // TODO Auto-generated method stub 
        Animal cat=new Cat(); 
        System.out.println("猫母亲生了一只小猫眯"); 
        return cat; 
    } 
 
}

 

package com.yq1012.创建型模式.工厂方法.工厂模式;
/**
 * 狗类
 * @author Lyon Yao
 *
 */ 
public class Dog extends Animal { 
 
    public Dog() { 
        // TODO Auto-generated constructor stub 
    } 
 
    public Dog(String name) { 
        super(name); 
        // TODO Auto-generated constructor stub 
    } 
 
    @Override 
    public void eat() { 
        // TODO Auto-generated method stub 
        System.out.println("I like to eat bone!"); 
    } 
 

 


package com.yq1012.创建型模式.工厂方法.工厂模式;
/**
 * 狗母亲  生狗
 * @author Lyon Yao
 *
 */ 
public class DogMother implements AnimalMother { 
 
    @Override 
    public Animal giveBirth() { 
        // TODO Auto-generated method stub 
        Animal dog=new Dog(); 
        System.out.println("狗母亲生了一只小狗"); 
        return dog; 
    } 
 

 


package com.yq1012.创建型模式.工厂方法.工厂模式;

public class Test {

 public static void main(String[] args) {
  
//  工厂方法模式:其主要是对各个类型的东西分类生产,但分类生产的对象仍然是具有某一特性的
//  譬如说:前面的静态工厂类是一个综合造车工厂,不管是汽车还是火车都能生产,
//  而工厂方法模式就是工厂具体分工,造汽车的工厂只造汽车,造火车的只造火车,不管造汽车还是火车但造出来的还是车。
//  具体代码例子如下:(这里的例子和上面的例子是一起的,具狗生好多小狗,猫生好多小猫的例子,如果不具体那么是母动物都能生的)
        AnimalMother mother=new CatMother(); 
         mother.giveBirth(); 
         mother=new DogMother(); 
         mother.giveBirth(); 
  
 }
}

您可能感兴趣的文章:
java工厂模式的学习笔记
深入php设计模式实例详解
java设计模式之抽象工厂模式实例
php工厂模式实例代码
solr中DirectoryFactory学习笔记
工厂模式是什么?
JavaScript 设计模式读书笔记(五)——工厂模式
php常用的三种设计模式的学习笔记
Spring 学习笔记--强烈推荐
什么是工厂模式?

[关闭]
~ ~