软件设计的一般原则:
1.开闭原则
对扩展开放,对修改关闭
2.里氏代换原则
在任何基类出现的地方,子类一定可以出现
3.依赖倒转原则
依赖于抽象,不依赖于实现
4.接口隔离原则
应当为客户提供尽可能小的单独的接口而不是大的总接口
5.组合,聚合复用原则
尽量使用组合聚合而不是使用继承达到代码复用
扫描二维码关注公众号,回复:
2324224 查看本文章
6.迪米特法则
一个软件实体应尽可能小的与其他实体发生作用
工厂模式:
简单工厂模式:
package com.westos.todo.service;
public interface TodoService {
void listTodos();
}
package com.westos.todo.service.impl;
import com.westos.todo.service.TodoService;
public class TodoServiceImpl implements TodoService{
@Override
public void listTodos() {
System.out.println("这是TodoServiceImpl");
}
}
package com.westos.todo.factory;
import com.westos.todo.service.TodoService;
import com.westos.todo.service.impl.TodoServiceImpl;
public class TodosFactory {
public static TodoService create() {
return new TodoServiceImpl();
}
}
package com.westos.todo.test;
import com.westos.todo.factory.TodosFactory;
import com.westos.todo.service.TodoService;
public class Test1 {
public static void main(String[] args) {
TodoService create = TodosFactory.create();
create.listTodos();
}
}
测试结果:这是TodoServiceImpl
工厂方法模式:
package com.westos.todo.service;
public interface TodoService {
void listTodos();
}
package com.westos.todo.service.impl;
import com.westos.todo.service.TodoService;
public class TodoServiceImpl implements TodoService{
@Override
public void listTodos() {
System.out.println("这是TodoServiceImpl");
}
}
package com.westos.todo.factory;
public interface AbstractFactorya {
Object create();
}
package com.westos.todo.factory;
import com.westos.todo.service.TodoService;
import com.westos.todo.service.impl.TodoServiceImpl;
public class TodosFactorya implements AbstractFactorya{
@Override
public TodoService create() {
return new TodoServiceImpl();
}
}
package com.westos.todo.test;
import com.westos.todo.factory.TodosFactorya;
import com.westos.todo.service.TodoService;
public class Test2 {
public static void main(String[] args) {
TodosFactorya todosFactorya = new TodosFactorya();
TodoService create = todosFactorya.create();
create.listTodos();
}
}
测试结果:这是TodoServiceImpl
抽象工厂模式:
package com.westos.todo.service;
public interface UserService {
void login();
}
package com.westos.todo.service;
public interface TodoService {
void listTodos();
}
package com.westos.todo.factory;
import com.westos.todo.service.TodoService;
import com.westos.todo.service.UserService;
public interface AbstractFactoryb {
UserService createUserService();
TodoService createTodoService();
}
package com.westos.moshi.factory;
import com.westos.moshi.service.TodoService;
import com.westos.moshi.service.UserService;
import com.westos.moshi.service.impl.TodoServiceOracleImpl;
import com.westos.moshi.service.impl.UserServiceOracleImpl;
public class AbstractbFactoryOracleImpl implements AbstractorybFactory{
@Override
public UserService createUserService() {
return new UserServiceOracleImpl();
}
@Override
public TodoService createTodoService() {
return new TodoServiceOracleImpl();
}
}
package com.westos.todo.service.impl;
import com.westos.todo.service.TodoService;
public class TodoServiceMysqlImpl implements TodoService{
@Override
public void listTodos() {
System.out.println("TodoService的MySQL方法");
}
}
package com.westos.todo.service.impl;
import com.westos.todo.service.UserService;
public class UserServiceMysqlImpl implements UserService {
@Override
public void login() {
System.out.println("UserService的MySQL方法");
}
}
package com.westos.todo.test;
import com.westos.todo.factory.AbstractFactoryMysqlImpl;
import com.westos.todo.service.TodoService;
import com.westos.todo.service.UserService;
public class Test3 {
public static void main(String[] args) {
AbstractFactoryMysqlImpl a = new AbstractFactoryMysqlImpl();
TodoService createTodoService = a.createTodoService();
UserService createUserService = a.createUserService();
createTodoService.listTodos();
createUserService.login();
}
}
测试结果:TodoService的MySQL方法
UserService的MySQL方法