zoukankan      html  css  js  c++  java
  • 工厂实际模式

    工厂模式:(普通工厂模式,多个工厂方法模式,静态工厂方法模式)在面向对象程序设计中,工厂通常是一个用来创建其他对象的对象。工厂模式根据不同的参数来实现不同的分配方案和创建对象。在工厂模式中,我们创建对象时不会暴露创建对象逻辑,并且是通过使用一个共同接口来指向新创建的对象。

    1.普通工厂模式:
    // 二者共同的接口
    public interface Human{
    public void eat();
    public void sleep();
    public void beat();
    }

    // 创建实现类 Male
    public class Male implements Human{
    public void eat(){
    System.out.println("Male can eat.");
    }
    public void sleep(){
    System.out.println("Male can sleep.");
    }
    public void beat(){
    System.out.println("Male can beat.");
    }
    }
    //创建实现类 Female
    public class Female implements Human{
    public void eat(){
    System.out.println("Female can eat.");
    }
    public void sleep(){
    System.out.println("Female can sleep.");
    }
    public void beat(){
    System.out.println("Female can beat.");
    }
    }

    // 创建普通工厂类
    public class HumanFactory{
    public Human createHuman(String gender){
    if( gender.equals("male") ){
    return new Male();
    }else if( gender.equals("female")){
    return new Female();
    }else {
    System.out.println("请输入正确的类型!");
    return null;
    }
    }
    }

    // 工厂测试类
    public class FactoryTest {
    public static void main(String[] args){
    HumanFactory factory = new HumanFactory();
    Human male = factory.createHuman("male");
    male.eat();
    male.sleep();
    male.beat();
    }
    }

    2.多个工厂方法模式
    // 多个工厂方法
    public class HumanFactory{
    public Male createMale() {
    return new Male();
    }
    public Female createFemale() {
    return new Female();
    }
    }

    // 工厂测试类
    public class FactoryTest {
    public static void main(String[] args){
    HumanFactory factory = new HumanFactory();
    Human male = factory.createMale();
    Human female = factory.createFemale();
    male.eat();
    male.sleep();
    male.beat();
    female.eat();
    female.sleep();
    female.beat();
    }
    }

    静态工厂方法模式:省去创建工厂实例,直接通过工厂类调用静态方法实现实例化
    // 多个工厂方法
    public class HumanFactory{
    public static Male createMale() {
    return new Male();
    }
    public static Female createFemale() {
    return new Female();
    }
    }

    // 工厂测试类
    public class FactoryTest {
    public static void main(String[] args){
    Human male = HumanFactory.createMale();
    male.eat();
    male.sleep();
    male.beat();
    }
    }

  • 相关阅读:
    洛谷 P1396 营救(二分答案)
    洛谷 P1807 最长路(toposort)
    洛谷 P1137 旅行计划(toposort)
    [bzoj3032][TYVJ P1924]七夕祭(环形均分纸牌,货仓选址)
    BZOJ3043 IncDec Sequence (差分)
    BZOJ2200 道路与航线(dijk+拓扑排序)
    P1462 通往奥格瑞玛的道路(二分+dijkstra)
    P1020 导弹拦截 O(nlogn)做法
    背包整理(01背包,完全背包,多重背包,分组背包)(待更新)
    [模板]树链剖分
  • 原文地址:https://www.cnblogs.com/Jason-MLiu/p/8406553.html
Copyright © 2011-2022 走看看