简单的设计模式总结

社会主义新天地 提交于 2019-11-26 06:06:01

1.设计模式

1.单例

1.作用

  1. 单例模式可以长期保存对象。
  2. 单例可以传递值:可以让两个对象在完全没有关系的前提下,实现值的传递,降低了耦合性,提高了内聚性。

注:静态方法通过类调用获取 ,所以成员变量设置成静态。
并且有了对象后,防止对象通过。调用成员变量,所以设置为私有。

2.实现

饿汉:直接获取
class SingleInstance{
	//2.在单例类的内部创建一个当前类的静态的私有化的对象
    //私有:防止获取对象后调用成员变量
    //静态:静态方法调用操作静态变量
	//只有饿汉式可以加final
	private final static SingleInstance s = new SingleInstance();
//1.创建构造方法,并私有化
private SingleInstance() {
	
}
//3.通过公共的静态的方法将singleInstance对象提供出去
public static SingleInstance getSingleInstace() {
	return  s;
}
//功能区:
int num;
public void test() {}
}
懒汉:获取时创建
class SingleInstance1{
	//2.在单例类的内部创建一个当前类的静态的私有化的对象
	private static SingleInstance1 s = null;
//1.创建构造方法,并私有化
private SingleInstance1() {	
}
//3.通过公共的静态的方法将singleInstance对象提供出去
public static SingleInstance1 getSingleInstace() {
	if (s == null) {
		s = new SingleInstance1();
	}
	return  s;
}
}
例子:runtime类

每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。

2.模板设计

实现功能时分成两部分,一部分确定,一部分不确定。不确定的交给子类,子类实现的结果又会反过来影响确定部分的功能。

public class Demo4 {
    public static void main(String[] args) {
        zi z = new zi();
        z.setFood("青草");
        z.func();
    }
}
class fu {
    public void eat() {
    }
    public void func() {
        System.out.println("要做啥饭?");
        eat();
    }
}
class zi extends fu {
    String food;

    public String getFood() {
        return food;
    }

    public void setFood(String food) {
        this.food = food;
    }

    public void eat() {
        System.out.println(food);
    }
}

3.适配器模式

1.例子

servlet(5方法接口),General servlet(适配器重写5方法) ,httpservlet(继承一个方法重写)

2.注意

可以视为特殊的装饰设计模式

4.装饰设计模式

装饰设计模式:基于已经实现的功能,提供增强的功能.

装饰设计模式的由来就来自于对缓冲流的实现.

特点:从缓冲流的角度讲解

1.使流原来的继承体更加的简单

2.提高了效率

3.由于是在原有的基础上提高增强的功能,所以他还要属于原来的体系

2.网址

1.组成

  1. 作用:实现客户端和服务器端的通信
  2. http协议:超文本传输协议,实现的是网络间的通信的一个通信规则
  3. https协议:安全的http协议—可以省略,默认是http协议
  4. 域名/IP:标记网络上的唯一一台主机 可以简化写:baidu
  5. 端口号:标记同一台主机上的某一个服务器 [0,65536]—可以省,默认80
  6. 资源路径: 可以省
  7. 查询条件: 可以省

2.注意

服务器是一个软件,例如tomcat

3.分类

  1. .com商业机构
  2. .org 非盈利组织
  3. .mil 军事机构
  4. .net 网络服务提供商
  5. .edu 教育机构

6.lambda表达式

软件版本更新
加功能
改bug
加强安全

3.枚举

1.特有属性

默认继承类,所以只能实现接口

枚举类构造方法默认为私有方法。

枚举可以有属性,但是属性需要在构造方法中赋值

public class Demo4 {
    public static void main(String[] args) {
        Sex sex = Sex.woman;
        //name为sex的名字,woman   ordinal为位置,1
        System.out.println(sex.name()+" "+sex.ordinal());
        //相当于Sex.man
        Sex sex2 = Sex.valueOf("man");
        System.out.println(sex2.name()+" "+sex2.ordinal());
        //输入枚举中的个数,2(只有women和man)
        System.out.println(Sex.values().length);
    }
}

enum Sex {
    man("男人",1), woman("女人",2);
    private int num;
    private String name;
    private Sex(String name , int num ){
        this.name = name;
        this.num = num;

    }
    @Override
    public String toString() {
        return "Sex{" +
                "num=" + num +
                ", name='" + name + '\'' +
                '}';
    }
}

2.EnumSet

EnumSet<Season> enumSet = EnumSet.allOf(Season.class);
	for (Season enum1 : enumSet) {
		System.out.println("季节:"+enum1);
	}

3.EnumMap

EnumMap<Season, String> map = new EnumMap<>(Season.class);
		map.put(Season.SPRING, "春天");
		map.put(Season.SUMMER, "夏天");
		map.put(Season.FULL, "秋天");
		map.put(Season.WINTER, "冬天");
		Set<Season> set = map.keySet();
		Iterator<Season> iterator = set.iterator();
		while (iterator.hasNext()) {
			Season season2 = (Season) iterator.next();
			System.out.println("EnumMap:"+map.get(season2));
		}

4.异常

1.分类:

  1. Error:错误
  2. Exception:运行中出现的不严重的错误
    运行时异常:RuntimeException
    编译时异常:

3.抛出异常、生成异常对象都可以通过 throw语句实现

Throws是声明异常

2.异常的抛出顺序:

​ 从代码异常的地方依此上抛至jvm调用异常类打印

3.特点:

程序出现异常的时候,会打印异常的信息并中断程序,所以当有多个异常同时出现的时候,默认只能执行第一个.

4.try…catch

  1. 异常时try代码立刻中断,直接执行catch
  2. 无论完成与否,执行finally
  3. 注意:函数return时,finally仍然会执行,但是exit退出不会执行。
  4. catch捕捉的异常应该将子类放在前

5.自定义异常

订单异常,用户异常,负数异常(一般直接继承Exception)

  class FuShuException extends Exception{
	public FuShuException() {
		// TODO Auto-generated constructor stub
	}
	public FuShuException(String message) {
		//这行代码必须写
		super(message);
	}
}
public class Demo6 {
	public static void main(String[] args) //throws FuShuException
	{
		Math4 math4 = new Math4();
		//第一种方式:继续向上抛,最后交给JVM
		//math4.div(3, -2);
		//第二种:tryCatch
		try {
			math4.div(3, -2);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

class Math4{
	//声明异常,告诉别人我是有可能发生这个异常.
    //当需要声明多个异常的时候,直接用,隔开
	public int div(int a,int b) throws FuShuException
	{
		if (b < 0) {
			throw new FuShuException("除数为负数了");
		}
		return a/b;
	}
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!