zoukankan      html  css  js  c++  java
  • 设计模式GOF23之工厂模式01

    简单工厂模式和工厂方法模式

    工厂模式核心:分工

    简单工厂模式不符合OCP(Open-Closed Princinple)原则,扩展时需要更改原代码

    工厂方法模式增加了类复杂度代码复杂度等,所以一般使用简单工厂模式

    普通代码

    public interface Car {
      void run();
    }

    public class Audi implements Car{
     @Override
     public void run() {
       System.out.println("奥迪在奔跑!!!");
     }
    }
    public class Bmw implements Car {
     @Override
     public void run() {
       System.out.println("BMW在奔跑!!!");
     }
    }
    public class Demo01 {
      public static void main(String[] args) {
       Car c1=new Audi();
       Car c2=new Bmw();
       
       c1.run();
       c2.run();
    }
     

    简单工厂模式

    public interface Car {
      void run();
    }

    public class Audi implements Car{
     @Override
     public void run() {
       System.out.println("奥迪在奔跑!!!");
     }
    }
    public class Bmw implements Car {
     @Override
     public void run() {
       System.out.println("BMW在奔跑!!!");
     }
    }
    /**
     * 简单工厂模式
     * 破坏了OCP原则修改时需要改代码
     * @author 小帆敲代码
     *
     */
    public class CarFactory {
      public static Car getCar(String type) {
       if(type.equals("奥迪")) {
        return new Audi();
       }else if(type.equals("宝马")) {
        return new Bmw();
       }else {
        return null;
       }
      }
    }
    public class Demo02 {
      public static void main(String[] args) {
       Car c1=CarFactory.getCar("宝马");
       Car c2=CarFactory.getCar("奥迪");
       
       c1.run();
       c2.run();
    }
    工厂方法模式
    public interface Car {
      void run();
    }
    public class Bmw implements Car {
     @Override
     public void run() {
       System.out.println("BMW在奔跑!!!");
     }
    }
    public class Audi implements Car{
     @Override
     public void run() {
       System.out.println("奥迪在奔跑!!!");
     }
    }
    public interface CarFactory {
      Car getCar();
    }
    public class AudiFactory implements CarFactory{
     @Override
     public Car getCar() {
      return new Audi();
     }
    }
    public class BmwFactory implements CarFactory{
     @Override
     public Car getCar() {
      return new Bmw();
     } 
    }
    public class Client {
      public static void main(String[] args) {
       Car c1=new AudiFactory().getCar();
       Car c2=new BmwFactory().getCar();
       
       c1.run();
       c2.run();
      }
    }
  • 相关阅读:
    【tarjan】【树的直径】【CF】K. Königsberg Bridges
    【组合数学】【恒等式】简单和、交错和
    【组合数学】【恒等式】$sum_{k=0}^{r}C_m^k imes C_{n}^{r-k}=C_{m+n}^r$
    【组合数学】【恒等式】$C_{n}^{r} imes C_{n-r}^{k-r}=C_{n}^{k} imes C_k^{r}$
    【树形DP】D. Serval and Rooted Tree
    【图论】图的欧拉定理
    【图论】网络流解决二分图最大匹配量问题
    【计算几何】atan2函数
    【单峰计数DP】Problem F – Fabricating Sculptures
    Java基础之:自定义泛型
  • 原文地址:https://www.cnblogs.com/code-fun/p/11311534.html
Copyright © 2011-2022 走看看