單例模式(懶漢式,餓漢式)

来源:互联网 发布:u盘安装linux系统教程 编辑:程序博客网 时间:2024/05/29 18:59

//装饰设计模式

public class Demo6_Wrap {/** * @param args * 装饰设计模式的好处是: * 耦合性不强,被装饰的类的变化与装饰类的变化无关 */public static void main(String[] args) {DAStudent hms = new DAStudent(new Student());hms.code();}}interface Coder {public void code();}class Student implements Coder {@Overridepublic void code() {System.out.println("javase");System.out.println("javaweb");}}class DAStudent implements Coder {//1,获取被装饰类的引用private Student s;//获取学生引用//2,在构造方法中传入被装饰类的对象public DAStudent(Student s) {this.s = s;}//3,对原有的功能进行升级@Overridepublic void code() {s.code();System.out.println("ssh");System.out.println("数据库");System.out.println("大数据");System.out.println("...");}}

1,单例设计模式。
解决的问题:就是可以保证一个类在内存中的对象唯一性。
必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。

如何保证对象唯一性呢?
1,不允许其他程序用new创建该类对象。
2,在该类创建一个本类实例。
3,对外提供一个方法让其他程序可以获取该对象。

步骤:
1,私有化该类构造函数。
2,通过new在本类中创建一个本类对象。
3,定义一个公有的方法,将创建的对象返回。

//饿汉式

class Single//类一加载,对象就已经存在了。{private static Single s = new Single();private Single(){}public static Single getInstance(){return s;}}


//懒汉式

class Single2//类加载进来,没有对象,只有调用了getInstance方法时,才会创建对象。//延迟加载形式。 {private static Single2 s = null;private Single2(){}public static Single2 getInstance(){if(s==null)s = new Single2();return s;}}


适配器设计模式:

interface 和尚 {public void 打坐();public void 念经();public void 撞钟();public void 习武();}abstract class 天罡星 implements 和尚 {//声明成抽象的原因是,不想让其他类创建本类对象,因为创建也没有意义,方法都是空的@Overridepublic void 打坐() {}@Overridepublic void 念经() {}@Overridepublic void 撞钟() {}@Overridepublic void 习武() {}}class 鲁智深 extends 天罡星 {public void 习武() {System.out.println("倒拔垂杨柳");System.out.println("拳打镇关西");System.out.println("大闹野猪林");System.out.println("......");}

工厂方法

public abstract class Animal {public abstract void eat();}
public class Cat extends Animal {@Overridepublic void eat() {System.out.println("猫吃鱼");}}
public class Dog extends Animal {@Overridepublic void eat() {System.out.println("狗吃肉");}}
public interface Factory {public Animal createAnimal();}
public class CatFactory implements Factory {@Overridepublic Animal createAnimal() {return new Cat();}}
public class DogFactory implements Factory {@Overridepublic Animal createAnimal() {return new Dog();}}
public static void main(String[] args) {DogFactory df = new DogFactory();Dog d = (Dog) df.createAnimal();d.eat();}


//模板设计模式

abstract class GetTime {public final long getTime() {long start = System.currentTimeMillis();code();long end = System.currentTimeMillis();return end - start;}public abstract void code();}class Demo extends GetTime {@Overridepublic void code() {int i = 0;while(i < 100000) {System.out.println("x");i++;}}}
public static void main(String[] args) {/*long start = System.currentTimeMillis();for(int i = 0; i < 1000000; i++) {System.out.println("x");}long end = System.currentTimeMillis();System.out.println(end - start);*/Demo d = new Demo();System.out.println(d.getTime());}












阅读全文
0 0
原创粉丝点击