设计模式的学习

本文探讨了设计模式中的两个基本原则——单一职责原则和开闭原则。单一职责原则强调类应具有低耦合、高内聚的特性,确保每个类只负责一项任务。在数据库操作中,通过接口实现增删改查功能,以降低耦合性。接着,介绍了开闭原则,其核心是使系统对扩展开放,对修改关闭。作者以静态工厂模式和工厂方法模式为例,解释了如何在实际代码中应用这一原则,同时分析了两种模式的优缺点。通过这些设计模式的应用,可以提高代码的可维护性和扩展性。

设计原则:
单一职责原则:
低耦合,高内聚
耦合性:类与类之间产生的关系
低耦合:让类与类之间的关系不复杂
内聚:执行一个件事情(功能)的能力
高内聚:一个类能够完成的事情,不要使用多个类一起来执行!

数据库
对某个数据进行增删改查(查询很重要的)
定一个接口:
增();
删();
改();
查();
实现类:
业务逻辑层:
增(){
增加xxx联系人/商品列表
}

2:开闭原则

    核心思想是:一个对象对扩展开放,对修改关闭

开发好一个程序(项目),尽量不要修改原有代码
类和类之间假设有关系
更改一个类的功能,其他类已需要更改(增加代码的代码的书写量)
SVN(版本控制)/git

设计模式:
创建型模式 对象的创建

结构型模式 对象的组成(结构)

行为型模式 对象的行为



简单工厂模式--->静态工厂方法模式 

 
  设计一个工厂类:
  工厂类提供一些静态方法,间接的去创建具体的对象
 
 优点:
不需要再创建具体类的对象,而是把创建的工作交给了工厂类来创建!

 弊端:如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护

我们通过代码来学习这个模式。

//提供了一个动物抽象类
public abstract  class Animal {
	
	//抽象功能
	public abstract void eat() ;
}
public class Cat extends Animal {

	@Override
	public void eat() {
		System.out.println("猫吃鱼...");
	}

}
public class Dog extends Animal{

	@Override
	public void eat() {
		System.out.println("狗吃骨头...");
	}
	
}
//动物工厂类
public class AnimalFactory {

	//无参构造私有:外界不能创建该类对象
	private AnimalFactory() {
		
	}
	//想办法用多态的形式解决:代码扩展性
	public static Animal createAnimal(String type) {
		if("cat".equals(type)) {
			return new Cat() ;
		}else if("dog".equals(type)) {
			return new Dog() ;
		}
		return null;
	}
}
public class AnimalDemo {

	public static void main(String[] args) {
		
		//养猫
		Cat c = new Cat() ;
		c.eat();
		Dog d = new Dog() ;
		d.eat(); 
		
		System.out.println("---------------------");
		//使用抽象类多态的形式改进工厂类
		Animal a = AnimalFactory.createAnimal("cat") ;
		a.eat();
		a = AnimalFactory.createAnimal("dog") ;
		a.eat();
		
		a = AnimalFactory.createAnimal("pig") ;
		// java.lang.NullPointerException
		//对象进行非空判断
		if(a!=null) {
			a.eat();
		}else {
			System.out.println("抱歉,当前工厂类不提供该动物类的创建");
		}
	}
}//猫吃鱼...
//狗吃骨头...
//---------------------
//猫吃鱼...
//狗吃骨头...
//抱歉,当前工厂类不提供该动物类的创建



工厂方法模式
     提供一个抽象类(抽象工厂)还需要提供一个接口(工厂接口),每一个具体的类都有对应的工厂类(实现工厂接口)
 具体对象的创建工作由继承抽象工厂的具体类实现
 
 优点:
        客户端不需要再负责对象的创建(不需显示创建具体对象),从而明确了各个类的职责,
        如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性
弊端:

书写代码量大了!

我们通过一段代码来具体学习这个模式。

//抽象类
public abstract class Animal {

	public abstract void eat() ;
}
public class Cat extends Animal {

	@Override
	public void eat() {
		System.out.println("猫吃鱼...");
		
	}
	
}
public class Dog extends Animal {

	@Override
	public void eat() {
		System.out.println("够吃骨头...");
	}

}
public interface Factory {
	
	//该工厂接口的方法的返回值是抽象工厂类
	public abstract Animal creatAnimal() ;
}
//猫的工厂类--->创建一个只猫
public class CatFactory implements Factory {

	@Override
	public Animal creatAnimal() {
		return  new Cat() ;
	}

}
public class DogFactory implements Factory {

	@Override
	public Animal creatAnimal() {
		return new Dog();
	}

}
public class DogFactory implements Factory {

	@Override
	public Animal creatAnimal() {
		return new Dog();
	}

}//猫吃鱼...
//-------------------
//狗吃骨头...

设计模式之单例模式
  单例模式核心思想:某些类的对象在创建的时候 ,在系统内存始终只有一个对象!
  单例模式分类:
  1)饿汉式 2)懒汉式(类似于多线程环境..)
 
 饿汉式:
在加载那个类的时候,对象的创建工作就已经完成了!

两种分类在设计上几乎一样:
1)定义一个类,将该类的无参构造方法私有化;
2)在该类的成员位置创建该类对象,并且一定要私有化,防止外界更改这个对象;
3)在该类中提供静态成员方法(返回值就是创建的那个对象),能被当前类直接调用,static修饰。


//学生类
public class Student {

	//无参构造私有化,目的为了防止用户创建对象的时候,会产生多个对象!
	//为了不让直接通过构造方法创建该类对象
	
	private Student() {}
	//成员位置创建该类的实例
	//静态方法只能访问静态变量
	//加入私有修饰
	private static Student s = new Student() ; //静态的类变量
	
	//提供一个公共的成员方法
	public  static Student getStudent() {
		return s ;
	}
}
public class StudentDemo {
	
	public static void main(String[] args) {
		
		//创建学生对象
		//在内存中有多个对象了
		Student s1 = Student.getStudent() ;
		Student s2 = Student.getStudent();
		System.out.println(s1==s2);//true
		
		
		
		System.out.println(s1);//org.westos_03.Student@70dea4e
		System.out.println(s2);//org.westos_03.Student@70dea4e
	}
}//true
//org.westos_03.Student@52e922
//org.westos_03.Student@52e922
懒汉式:
符合单例模式核心思想
   1)自定义一个类,将无参构造私有化;
  2)在成员位置声明变量;
3)提供公共静态功能,在里面判断的时候创建该类对象,返回该类对象。
 

懒汉式(延迟加载 -->懒加载)
可能会出现问题
---> 多线程的问题
         --->校验多线程安全问题的标准
1)是否是多线程环境
  2)是否有共享数据
3)是否有多条语句对共享数据进行操作  (使用同步机制进行操作)


public class Teacher {
	
	//无参构造私有化
	private Teacher() {
		
	}
	
	//在成员位置声明变量
	//私有化,并且
	private static Teacher t = null ;
	
	//静态的同步方法  (锁对象: 类名.class)
	public synchronized static Teacher getTeacher() {
		if(t==null) {
			t = new Teacher() ;
		}
		return t ;
	}
}

public class TeacherDemo {
	
	public static void main(String[] args) {
		
		//调用getTeacher()功能
		Teacher t1 = Teacher.getTeacher() ;
		Teacher t2 = Teacher.getTeacher() ;
		System.out.println(t1==t2);
		System.out.println(t1);//org.westos_04.Teacher@70dea4e
		System.out.println(t2);
		}
}//true
//org.westos_04.Teacher@52e922
//org.westos_04.Teacher@52e922







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值