设计模式之装饰设计模式 //实现包装
*/
public static void main(String[] args) {
Student s = new Student();// 学生类开始有的功能
s.code();
ItcastStudent is = new ItcastStudent(new Student());
is.code(); //学生包装后的功能
}
}
interface Coder {
public void code();
}
class Student implements Coder {
@Override
public void code() {
System.out.println("javase");
System.out.println("javaweb");
}
}
class ItcastStudent implements Coder {
private Student s;
public ItcastStudent(Student s) {
this.s = s;
}
@Override
public void code() {
s.code();
System.out.println("ssh");
System.out.println("安卓");
System.out.println("ios");
System.out.println("数据库");
System.out.println("............");
}
}
单例设计模式:
//控制只创建唯一的对象
public class SingleDemo {
public static void main(String[] args) {
Single s1 = Single.getInstance();
Single s2 = Single.getInstance();//s1和s2两个引用指向的是同一个对象
}
}
class Single{(饿汉式)
//如果不设成静态的,下面静态方法不能调用
//如果不设成私有的,方法外就可以直接写成
//Single s =Single.s;这样不好控制
private static Single s = new Single();
private Single(){};//私有构造方法是因为不让外面创建此类对象
//设置成静态,是因为外面主函数是静态的。
//可以传递参数,控制什么情况可以放回对象
public static Single getInstance(){
return s;//返回引用变量
}
}
//单例延迟模式,上面直接new了一个空间,这个调用才new(懒汉式)
class Single2{
private static Single2 s = new Single2();
private Single2(){};
public static Single2 getInstance(){
if(s==null){
s = new Single2();
}
return s;
}
//单例第三种
class Singleton {
//1,私有构造函数
private Singleton(){}
//2,创建本类对象公共的静态的最终的本类对象
public static final Singleton s = new Singleton();
}
最好用饿汉式
/*饿汉式和懒汉式的区别
* 1,饿汉式是以空间换时间
* 懒汉式是以时间换空间
* 2,饿汉式在多线程访问不会有安全隐患,不会创建多个对象
* 懒汉式在多线程方法有安全隐患,有可能会创建多个对象
*/
适配器设计模式
interface 和尚 {
public void 打坐();
public void 撞钟();
public void 念经();
public void 练武();
}
/*
* 当把一个类声明成抽象的,而这个类中没有抽象方法,作用只有一个,就是不让其他类来创建这个类对象
* 适配器类中所有的方法都是空的,创建对象调用他也是没有意义的
*/
abstract class 天罡星 implements 和尚{ //适配器类
@Override
public void 打坐() {
}
@Override
public void 撞钟() {
}
@Override
public void 念经() {
}
@Override
public void 练武() {
}
}
class 鲁智深 extends 天罡星 {
public void 练武(){
System.out.println("倒拔垂杨柳");
System.out.println("拳打镇关西");
System.out.println("大闹野猪林");
System.out.println("......");
}
}