欢迎查看常用设计模式

单例模式

是确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
注意:
某个类只能有一个实例。
类必须自行创建这个实例。
以公共、统一的方式向整个系统提供这个实例。

饿汉式

//饿汉式,程序启动则立即加载

public class EagerSingleton {
	private static EagerSingleton instanace=new EagerSingleton();
	public EagerSingleton() {
	}	
	public static EagerSingleton getInstance() {
		return instanace;		
	}
}

懒汉式

//懒汉式,调用的时候才加载

public class LazySingleton {
	private  static LazySingleton instance;
	public LazySingleton() {	
	}
	public static synchronized LazySingleton getInstance() {
		if(instance !=null) {
			instance =new LazySingleton();
		}
		return instance;
	}
}

优化后的懒汉式

//优化后的懒汉式,采用内部类,放弃加锁。节省时间和空间

public class GoodLazySingleton {
	private static class inner{
		private static GoodLazySingleton instance=new GoodLazySingleton();
	}
	public GoodLazySingleton() {}
	
	public static GoodLazySingleton getInstance() {
		return inner.instance;	
	}
}

测试

//只需要判断两个对象是否相等,即可得出每次产生的均为同一个对象

public class Test {
	public static void main(String[] args) {
		System.out.println(EagerSingleton.getInstance() == EagerSingleton.getInstance() );
		System.out.println(LazySingleton.getInstance() == LazySingleton.getInstance());
		System.out.println(GoodLazySingleton.getInstance() == GoodLazySingleton.getInstance());
	}
}

策略模式

代码

public interface Action {
	void start();
	void run();
}

测试

public class Test {
	public static void done(Action action) {
		System.out.println("第一步:*************");
		action.start();
		System.out.println("第三步:*************");
		action.run();
		System.out.println("第五步:*************");
	}
	public static void main(String[] args) {
		done(new Action() {
			public void start() {
				System.out.println("启动**********");
			}	
			public void run() {
				System.out.println("开始跑!************");
			}	
		});			
	}
}

代理模式

代码

public interface 请客者 {
	void 请客();
}
public class Boss implements 请客者 {
	@Override
	public void 请客() {
		System.out.println("我是老板我请客");
	}
}
public class MiShu implements 请客者 {
	private 请客者 q;
	public MiShu(请客者 q) {
		this.q=q;
	}
	@Override
	public void 请客() {
		System.out.println("下班后请大家吃饭");
		this.q.请客();
		System.out.println("过后再聚");

	}
}

测试

public class Test {
	public static void main(String[] args) {	
		请客者 qk = new MiShu(new Boss());
		qk.请客();
	}
}

工厂模式

代码

public class FruitFactory {
	public static final int FRUIT_TYPE_APPLE=1;
	public static final int FRUIT_TYPE_BANANA=2;
	public static final int FRUIT_TYPE_ORANGE=3;
	
	public static Fruit createFruit(int type) {
		switch (type) {
		case 1:return new Apple();
		case 2:return new Banana();
		case 3:return new Orange();
		default:throw new RuntimeException("本厂不生产该水果");		
		}
	}
}
public interface Fruit {
	void show();
}
public class Apple implements Fruit {
	public void show() {
	System.out.println("生产出了苹果");
	}
}


public class Banana implements Fruit {
	public void show() {
	System.out.println("生产出了香蕉");
	}
}
public class Orange implements Fruit {
	public void show() {
	System.out.println("生产出了橙子");
	}
}

测试

public class Test {
	public static void main(String[] args) {
		Fruit f= FruitFactory.createFruit(FruitFactory.FRUIT_TYPE_APPLE);
		Fruit f1= FruitFactory.createFruit(FruitFactory.FRUIT_TYPE_BANANA);
		Fruit f2= FruitFactory.createFruit(FruitFactory.FRUIT_TYPE_ORANGE);
		f.show();
		f1.show();
		f2.show();
	}
}

适配器模式

在这里插入图片描述

代码

public class Adapter implements FN {
	private Funner fun;
	public Adapter(Funner fun) {
		super();
		this.fun = fun;
	}
	@Override
	public void save(Object[] obj) {
		for(Object o:obj) {
			fun.insert(o);
		}
	}
	@Override
	public void delete(Object obj) {
		fun.remove(obj);
	}

}
public interface FN {
	void save(Object [] obj);
	void delete(Object obj);
}
public class Funner {
	public void insert(Object  obj) {
		System.out.println("添加数据:"+obj);
	}
	public void remove(Object obj) {
		System.out.println("删除数据:"+obj);
	}
}

测试

public class Test {
	static void test(FN fn) {
		fn.save(new Object[] {1,2,3,4,5,6,9});
		fn.delete(5);
	}
	public static void main(String[] args) {
		test(new Adapter(new Funner()));
	}
}

责任链模式

在这里插入图片描述

代码

public class Res {
	private int days;
	public Res(int days) {
		super();
		this.days = days;
	}

	public int getDays() {
		return days;
	}
	public void setDays(int days) {
		this.days = days;
	}
}
public abstract class Hander {
	private Hander nextHander;
	public Hander(Hander nextHander) {
		super();
		this.nextHander = nextHander;
	}
	public abstract void handle(Res res);
	
	public Hander getNextHander() {
		return nextHander;
	}
}
public class TeamLeader extends Hander{
	public TeamLeader(Hander nextHander) {
		super(nextHander);
	}
	@Override
	public void handle(Res res) {
		System.out.println("项目组长同意!");
		if(res.getDays()>1) {
			getNextHander().handle(res);;
		}
	}
}
public class PM extends Hander {

	public PM(Hander nextHander) {
		super(nextHander);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void handle(Res res) {
		System.out.println("项目经理同意");
		if(res.getDays()>3) {
			getNextHander().handle(res);
		}
		
	}

}
public class Boss extends Hander {

	public Boss(Hander nextHander) {
		super(nextHander);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void handle(Res res) {
		System.out.println("总经理同意!");
	}
}

测试

public class Test {
	public static void main(String[] args) {
		Hander hd= new TeamLeader(new PM(new Boss(null)));
		hd.handle(new Res(4));
	}
}

装饰者模式

代码

public interface Animal {
	abstract void run();
}
public abstract class Decorator implements Animal {
	private Animal animal;

	public Decorator(Animal animal) {
		super();
		this.animal = animal;
	}

	public Animal getAnimal() {
		return animal;
	}
}
public class Dancer extends Decorator {

	public Dancer(Animal animal) {
		super(animal);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void run() {
		System.out.print("会跳舞的");
		getAnimal().run();

	}

}
public class Tail extends Decorator {

	public Tail(Animal animal) {
		super(animal);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void run() {
		System.out.print("会摇尾巴的");
		getAnimal().run();

	}

}
public class Dog implements Animal {

	@Override
	public void run() {
		System.out.println("狗用四条腿在陆地上跑");
	}

}
public class Fish implements Animal{

	@Override
	public void run() {
		System.out.println("鱼在水里游泳");
	}

}

测试

public class Test {
	public static void main(String[] args) {
		
		Animal a = new Tail(new Dancer(new Dog()));
		a.run();
		

	}

}
发布了5 篇原创文章 · 获赞 8 · 访问量 310

猜你喜欢

转载自blog.csdn.net/weixin_44989103/article/details/101123513