zoukankan      html  css  js  c++  java
  • 单例、简单工厂模式。

    单例模式:

    *
    *单例模式:一类只有一个实例。
    *特点:构造方法私有化,提供一个静态的方法获取实例。
    *懒汉式:使用时再创建对象。
    */
    public class Singleton2 {

    // private String name;
    // 修饰符 数据类型 属性名;
    private static Singleton2 singleton ;

    private Singleton2(){
    }

    public static Singleton2 getInstance(){
    if(singleton==null){
    singleton = new Singleton2();
    }
    return singleton;
    }

    }

    单例模式:一类只有一个实例。
    *特点:构造方法私有化,提供一个静态的方法获取实例。
    *饿汉式:加载时创建对象
    */
    public class Singleton {
    private static Singleton singleton = new Singleton();

    private Singleton(){
    }

    public static Singleton getInstance(){
    return singleton;
    }

    }

    public class TestSingleton {
    public static void main(String[] args) {
    Singleton s = Singleton.getInstance();
    Singleton s2 = Singleton.getInstance();
    System.out.println(s==s2);//如何引用类型使用"==",其比较的是地址是否相同。
    }
    }

    简单工厂模式:

     简单工厂模式(静态工厂方法):属于创建型模式,主要用生成"产品"。
    * 工厂模式的命名:xxxFactory--->生成xxx
    *需求:创建一个生成斧头的工厂,根据用户传入的参数生产相应斧头并返回
    * 如果参数为steel--->生成SteelAxe的一个对象
    * 如果参数为stone--->生成StoneAxe的一个对象
    *如何实现工厂模式?
    * 1.编写父类和子类或接口和实现类
    * 2.编写静态的工厂方法,返回值类型为父类或接口。--->多态
    * 3.根据用户的需求动态创建子类的实例,并返回。
    *
    */
    public class AxeFactory {
    /**
    * 负责创建产品(斧头)
    * @param ch
    * @return
    */
    public static Axe getInstance(String ch){
    Axe axe=null;
    if(ch.equals("steel")){
    axe = new SteelAxe();
    }else if(ch.equals("stone")){
    axe = new StoneAxe();
    }
    return axe;
    }



    public static void main(String[] args) {
    Axe axe = AxeFactory.getInstance("steel");
    axe.chop();
    System.out.println("*********************");
    Axe axe2 = AxeFactory.getInstance("stone");
    axe2.chop();

    }

    }

    public abstract class Axe {
    public abstract void chop();
    }

     

    public class SteelAxe extends Axe {

    @Override
    public void chop() {
    System.out.println("我是铁斧,砍日本人锋利!");
    }

    }

    public class StoneAxe extends Axe {

    @Override
    public void chop() {
    System.out.println("我是石斧,砍日本人很钝!");
    }

    }

     

  • 相关阅读:
    Timer 实现2秒4秒连环炸
    Java中的注解
    PHP连接打印机
    php同步mysql两个数据库中表的数据
    thinkphp 两表、三表联合查询
    ereg/eregi报错处理办法
    ThinkPHP3.2判断手机端访问并设置默认访问模块的方法
    使用PHP获取时间今天 明天 昨天 时间戳的详解
    jquery获取radio和select选中值
    php开启mysqli扩展之后如何连接数据库
  • 原文地址:https://www.cnblogs.com/benpaozhimeng/p/6979672.html
Copyright © 2011-2022 走看看